dpdk代码总体思路 | 您所在的位置:网站首页 › dpdk rcu › dpdk代码总体思路 |
dpdk代码总体思路
原创
mb61737bf531aa2 2023-03-20 13:32:39 博主文章分类:dpdk&vpp ©著作权 文章标签 系统性能 数据结构 上下文切换 文章分类 JavaScript 前端开发 ©著作权归作者所有:来自51CTO博客作者mb61737bf531aa2的原创作品,请联系作者获取转载授权,否则将追究法律责任1.用户空间轮询 减少中断带来开销;减少系统调用带来开销; 零拷贝减少内存拷贝的时间; 轮询 Polling,busy looping 提供了I/O批量处理的可能性; 避免中断性能瓶颈是DPDK提升数据包处理速度的关键之一; 2.多核CPU性能优化 RSS硬件队列;CPU独占:独占CPU资源,减少调度影响,提高系统性能; CPU绑定:减少CPU上下文切换,提高系统性能; 中断亲和 : 中断负载均衡,减轻其他CPU负担,提高系统性能; 进程亲和:减少CPU上下文切换,提高系统性能; 中断隔离:减少中断对CPU调度影响,提高系统性能; Per CPU:Per-CPU是基于空间换时间的方法, 让每个CPU都有自己的私有数据段(放在L1中),并将一些变量私有化到 每个CPU的私有数据段中. 单个CPU在访问自己的私有数据段时, 不需要考虑其他CPU之间的竞争问题,也不存在同步的问题. 注意只有在该变量在各个CPU上逻辑独立时才可使用; 锁优化无锁数据结构,将并发最大化;Per-CPU设计,尽量避免资源竞争;采用RCU机制,读写共享数据可以无锁并行;深入理解RCU|核心原理spinlock,采用非阻塞锁,防止上下文切换导致cache miss; 采用CAS原子操作(Compare and Swap)进行无锁设计; 4.批量处理 轮询机制允许一次接收或发送多个报文;批量处理分摊的接收或发送操作本身的开销; 绝大部分报文需要做相同或相似的计算处理,意味着相同的指令会被反复地执行,报文的批量计算分摊了函数调用的上下文切换,堆栈的初始化等等开销,同时大大减少了l1i cache miss 对于某一个函数,l1icache miss 仅仅发生在第一个报文被处理的时刻 批量计算提供了更好的代码优化可能性(数据预取,多重循环等) 5.Cache优化 CPU的速度远远大于RAM的速度程序在运行时具有局部性规律 时间局部性,很快还会访问 空间局部性,相邻也会访问 不同级别cache速度差异 L1 > L2 > L3 减少Cache Miss是提升性能的关键 Cache 层次化结构 iCacheMiss 常常被忽略 更优的代码,编译器优化选项 更小的代码尺寸 更好的代码布局- 分支预测 Cache一致性问题原则是避免多个核访问同一个内存地址或数据结构 在数据结构上,每个核都有独立的数据结构 多个核访问同一个网卡:每个核都创建单独的接收队列和发送队列 代码优化技巧Cache Line 对齐,减少dCache miss, 避免伪共享;数据预取,减少dCache miss, prefetch 指令;分支预测,优化代码布局, 提高CPU流水线效率;函数内联,减少函数调用开销;CPU扩展指令集SIMD:sse,avx,减少指令数量,最大化的利用一级缓存访存的带宽;多重循环处理报文,更好地优化CPU流水线;编译器优化;http代理服务器(3-4-7层代理)-网络事件库公共组件、内核kernel驱动 摄像头驱动 tcpip网络协议栈、netfilter、bridge 好像看过!!!! 但行好事 莫问前程 --身高体重180的胖子
赞 收藏 评论 分享 举报 上一篇:contrack TCP协议状态转换 下一篇:iptables 各种target |
CopyRight 2018-2019 实验室设备网 版权所有 |